import decimal #引入 decimal 模块，使用 decimal.Decimal 类型来处理浮点数运算，提高精度

def format_term(j):
    """将分母超过两位数的项表示为 2 的幂次方形式"""
    if 2 ** j > 100:
        return f'1/2^{j}'
    else:
        return f'1/{2 ** j}'

def generate_series_string(n, max_terms=5):
    """生成等比数列的算式字符串，超过 max_terms 项时使用省略号替代中间部分"""
    if n <= max_terms:
        return '+'.join(format_term(j) for j in range(1, n + 1))
    else:
        first_part = '+'.join(format_term(j) for j in range(1, max_terms // 2 + 1))
        last_part = format_term(n)
        return f'{first_part}+...+{last_part}'

def generate_geometric_series(n):
    '''生成等比数列前n行的函数

    参数: n为等比数列的项数,整数
    '''

    try:
        with open('等比.txt', 'w', encoding='utf-8') as file:
            cumulative_sum = decimal.Decimal(0)
            for i in range(1, n + 1):
                current_term = decimal.Decimal(1) / (2 ** i)
                cumulative_sum += current_term
                series = generate_series_string(i)  # 使用生成器表达式生成当前行的算式字符串
                file.write(f'{series}={cumulative_sum}\n')
    except IOError as e:
        print(f"文件操作错误: {e}")

# 测试函数
generate_geometric_series(99)